/**
 ******************************************************************************
 * @file           : bsp_can_config.h
 * @brief          : CAN Configuration File (STM32H7xx)
 ******************************************************************************
 * @attention
 *
 * CAN总线配置文件
 * 包含引脚定义、波特率配置等硬件相关参数
 * 用户根据实际硬件修改此文件
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_CAN_CONFIG_H
#define __BSP_CAN_CONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32h7xx.h"

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/

/* ============================================================================ */
/*                       日志系统配置（改这里的数字）                             */
/* ============================================================================ */
/* 日志后端选择：1=EasyLogger, 2=printf, 0=关闭 */
#define CAN_USE_LOG     1

/* 根据配置自动定义日志宏 */
#if (CAN_USE_LOG == 1)
    /* 使用EasyLogger */
    #ifndef LOG_TAG
        #define LOG_TAG    "CAN"
    #endif
    #include "elog.h"
    
#elif (CAN_USE_LOG == 2)
    /* 使用printf */
    #include <stdio.h>
    #define log_i(fmt, ...)     printf(fmt "\r\n", ##__VA_ARGS__)
    #define log_w(fmt, ...)     printf("[WARN] " fmt "\r\n", ##__VA_ARGS__)
    #define log_e(fmt, ...)     printf("[ERROR] " fmt "\r\n", ##__VA_ARGS__)
    #define log_d(fmt, ...)     printf("[DEBUG] " fmt "\r\n", ##__VA_ARGS__)
    
#else
    /* 关闭日志 */
    #define log_i(fmt, ...)
    #define log_w(fmt, ...)
    #define log_e(fmt, ...)
    #define log_d(fmt, ...)
#endif

/* ============================================================================ */
/*                          硬件引脚配置（用户可修改）                            */
/* ============================================================================ */

/* CAN TX引脚（发送） */
#define CAN_TX_GPIO_PORT                GPIOH                                           /*!< TX引脚端口 */
#define CAN_TX_GPIO_PIN                 GPIO_PIN_13                                     /*!< TX引脚号 */
#define CAN_TX_GPIO_CLK_ENABLE()        do{ __HAL_RCC_GPIOH_CLK_ENABLE(); }while(0)     /*!< TX端口时钟使能 */

/* CAN RX引脚（接收） */
#define CAN_RX_GPIO_PORT                GPIOH                                           /*!< RX引脚端口 */
#define CAN_RX_GPIO_PIN                 GPIO_PIN_14                                     /*!< RX引脚号 */
#define CAN_RX_GPIO_CLK_ENABLE()        do{ __HAL_RCC_GPIOH_CLK_ENABLE(); }while(0)     /*!< RX端口时钟使能 */

/* CAN使用的外设 */
#define CAN_CANx                        CAN1                                            /*!< 使用的CAN外设 */
#define CAN_CANx_CLK_ENABLE()           do{ __HAL_RCC_CAN1_CLK_ENABLE(); }while(0)      /*!< CAN时钟使能 */

/* CAN中断配置 */
#define CAN_RX_IRQn                     CAN1_RX0_IRQn                                   /*!< CAN接收中断 */
#define CAN_RX_IRQHandler               CAN1_RX0_IRQHandler                             /*!< CAN接收中断处理函数 */

/* ============================================================================ */
/*                          功能配置（用户可修改）                               */
/* ============================================================================ */

/* CAN波特率配置（STM32H7xx APB1时钟通常为54MHz，波特率500Kbps） */
#define CAN_PRESCALER                   6                       /*!< 分频器(1-1024) */
#define CAN_TIME_SEG1                   FDCAN_BIT_SEG1_9TQ     /*!< 时间段1 */
#define CAN_TIME_SEG2                   FDCAN_BIT_SEG2_2TQ     /*!< 时间段2 */
#define CAN_SJW                         FDCAN_BIT_SJW_2TQ      /*!< 重同步跳跃宽度 */

/* CAN工作模式 */
#define CAN_MODE                        FDCAN_MODE_NORMAL       /*!< 正常模式 */

/* CAN接收缓冲区大小 */
#define CAN_RX_BUF_SIZE                 32                      /*!< 接收缓冲区大小(消息数) */

/* Exported macro ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

#ifdef __cplusplus
}
#endif

#endif /* __BSP_CAN_CONFIG_H */
